package cn.usian.demo01_finally;

/*
    测试finally代码块的效果
 */
public class TestFinally {
    public static void main(String[] args) {
        //int a = a1();
        //System.out.println(a);// 3

        //int a = a2();
        //System.out.println(a);// 3

        int a = a3();
        System.out.println(a);// 2
    }

    public static int a1() {
        try {
            return 1;
        } catch (Exception e) {
            return 2;
        } finally {
            return 3;
        }
    }

    public static int a2() {
        int a = 1;
        try {
            a++;
            return a;
        } catch (Exception e) {
            a++;
            return a;
        } finally {
            a++;
            return a;
        }
    }

    public static int a3() {
        int a = 1;
        try {
            a++;
            return a;
            // return第一次执行的时候,就已经把变量a的值获取出来并做好了返回的准备,此时由于有finally代码块存在,因此会先执行finally代码块,代码执行的时候,确实可以对变量a的值+1,但是当finally执行后,再次回到return的时候,return并不会重新获取变量的值,而是直接返回上一次获取的值;
        } catch (Exception e) {
            a++;
            return a;
        } finally {
            a++;
        }
    }


}
